#!/usr/bin/env python
# coding=utf-8
from text2vec import SentenceModel
from typing import Optional
import torch
def load_embeddings_model(model_path: str, device: Optional[str]=None, max_seq_length: int = 128) -> SentenceModel:
    """
    Loads an already-pre-trained sentence model from a file.
    EncoderType 是一个枚举类型，定义了文本编码器的不同选项。这些选项决定了如何从预训练的语言模型中抽取文本的语义特征。具体而言，它定义了基于 BERT 实现的句子编码器的不同变种，用于集成 BERT 在 NLP 任务中的表示学习能力。

    该枚举类中定义的选项包括：

    FIRST_LAST_AVG：将第一个和最后一个 token 的表示向量取平均值。
    LAST_AVG：将所有 token 的表示向量取平均值，并使用最后一个 token 的表示向量进行线性变换。
    CLS：使用 [CLS] token 的表示向量。
    POOLER：使用 [CLS] token 的表示向量，并添加一个额外的全连接层进行深度表达。
    MEAN：将第一个到最后一个 token 的表示向量取平均值。
    这些编码器类型不仅能用于 BERT，也可以应用于其他任何基于 Transformer 的 NLP 模型，用于抽取文本数据的特征向量。
    """
    device = device or "cuda" if torch.cuda.is_available() else "cpu"
    model = SentenceModel(model_path, max_seq_length=max_seq_length, device=device)
    return model